namespace WebapiTemplate.Application.Common.Interface
{
    /// <summary>
    /// 操作表的接口类
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public interface IRepository<T>
    {
        #region  查寻整表
        IQueryable<T> Table{get;}
        #endregion




        // 增删改查都使用异步(返回值都是对应的数据)
        #region 查找
        //根据id查找
        Task<T?> FindByid(Guid id);
        #endregion




        #region 增加
        //单条增加--也可用于审计日志表的新增功能
        Task<T> AddAsync(T entity);

        //批量增加
        Task<IEnumerable<T>> AddBulkAsync(IEnumerable<T> entities); 
        #endregion




        #region 更改
        //单条更改
        Task<T> UpdateAsync(T entity);

        //批量更改
        Task<IEnumerable<T>> UpdateAsync(IEnumerable<T> entities);
        #endregion



        
        #region 删除(isRealDelete = false默认伪删除)
        //isRealDelete用于判断是否真正删除，默认为false
        //根据Id单条删除
        Task DeleteByIdAsync(Guid id,bool isRealDelete=false);

        //根据实体单条删除
        Task<T> DeleteByentityAsync(T entity,bool isRealDelete=false);
        
        //批量删除
        Task<IEnumerable<T>> DeleteBulkAsync(IEnumerable<T> entities,bool isRealDelete=false);
        #endregion


    }
}